001 /* 002 * Copyright 1996-2005 Mort Bay Consulting Pty. Ltd. 003 * Copyright 2006 Stephen McConnell. 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package net.dpml.test.http; 019 020 import java.io.IOException; 021 import java.io.PrintWriter; 022 import java.util.Date; 023 import java.util.Enumeration; 024 025 import javax.servlet.ServletConfig; 026 import javax.servlet.ServletException; 027 import javax.servlet.http.HttpServlet; 028 import javax.servlet.http.HttpServletRequest; 029 import javax.servlet.http.HttpServletResponse; 030 import javax.servlet.http.HttpSession; 031 032 /** Test Servlet Sessions. 033 * 034 * @author Greg Wilkins (gregw) 035 */ 036 public class SessionDump extends HttpServlet 037 { 038 039 private int m_redirectCount = 0; 040 041 /** 042 * Servlet initialization. 043 * @param config the servlet configuration 044 * @exception ServletException if a configuration error occurs 045 */ 046 public void init( ServletConfig config ) throws ServletException 047 { 048 super.init( config ); 049 } 050 051 /** 052 * Process an incomming post request. 053 * @param request the http request 054 * @param response the http response 055 * @exception ServletException if a servlet processing error occurs 056 * @exception IOException if an IO error occurs 057 */ 058 public void doPost( HttpServletRequest request, HttpServletResponse response ) 059 throws ServletException, IOException 060 { 061 HttpSession session = request.getSession( false ); 062 String action = request.getParameter( "Action" ); 063 String name = request.getParameter( "Name" ); 064 String value = request.getParameter( "Value" ); 065 066 String nextUrl = getURI( request ) + "?R=" + m_redirectCount++; 067 if( action.equals( "New Session" ) ) 068 { 069 session = request.getSession( true ); 070 session.setAttribute( "test", "value" ); 071 } 072 else if( session!=null ) 073 { 074 if( action.equals( "Invalidate" ) ) 075 { 076 session.invalidate(); 077 } 078 else if( action.equals( "Set" ) && ( name != null ) && ( name.length() > 0 ) ) 079 { 080 session.setAttribute( name, value ); 081 } 082 else if( action.equals( "Remove" ) ) 083 { 084 session.removeAttribute( name ); 085 } 086 } 087 088 String encodedUrl = response.encodeRedirectURL( nextUrl ); 089 response.sendRedirect( encodedUrl ); 090 } 091 092 /** 093 * Process an incomming get request. 094 * @param request the http request 095 * @param response the http response 096 * @exception ServletException if a servlet processing error occurs 097 * @exception IOException if an IO error occurs 098 */ 099 public void doGet( HttpServletRequest request, HttpServletResponse response ) 100 throws ServletException, IOException 101 { 102 response.setContentType( "text/html" ); 103 104 HttpSession session = request.getSession( getURI( request ).indexOf( "new" ) > 0 ); 105 106 PrintWriter out = response.getWriter(); 107 out.println( "<h1>Session Dump Servlet:</h1>" ); 108 out.println( "<form action=\"" + response.encodeURL( getURI( request ) ) + "\" method=\"post\">" ); 109 110 if( session == null ) 111 { 112 out.println( "<H3>No Session</H3>" ); 113 out.println( "<input type=\"submit\" name=\"Action\" value=\"New Session\"/>" ); 114 } 115 else 116 { 117 try 118 { 119 out.println( "<b>ID:</b> " + session.getId() + "<br/>" ); 120 out.println( "<b>New:</b> " + session.isNew() + "<br/>" ); 121 out.println( "<b>Created:</b> " + new Date( session.getCreationTime() ) + "<br/>" ); 122 out.println( "<b>Last:</b> " + new Date( session.getLastAccessedTime() ) + "<br/>" ); 123 out.println( "<b>Max Inactive:</b> " + session.getMaxInactiveInterval() + "<br/>" ); 124 out.println( "<b>Context:</b> " + session.getServletContext() + "<br/>" ); 125 126 Enumeration keys = session.getAttributeNames(); 127 while( keys.hasMoreElements() ) 128 { 129 String name = (String) keys.nextElement(); 130 String value = (String) session.getAttribute( name ); 131 out.println( "<b>" + name + ":</b> " + value + "<br/>" ); 132 } 133 134 out.println( "<b>Name:</b><input type=\"text\" name=\"Name\" /><br/>" ); 135 out.println( "<b>Value:</b><input type=\"text\" name=\"Value\" /><br/>" ); 136 137 out.println( "<input type=\"submit\" name=\"Action\" value=\"Set\"/>" ); 138 out.println( "<input type=\"submit\" name=\"Action\" value=\"Remove\"/>" ); 139 out.println( "<input type=\"submit\" name=\"Action\" value=\"Invalidate\"/><br/>" ); 140 141 out.println( "</form><br/>" ); 142 143 if( request.isRequestedSessionIdFromCookie() ) 144 { 145 out.println( "<P>Turn off cookies in your browser to try url encoding<BR>" ); 146 } 147 if( request.isRequestedSessionIdFromURL() ) 148 { 149 out.println( "<P>Turn on cookies in your browser to try cookie encoding<BR>" ); 150 } 151 } 152 catch( IllegalStateException e ) 153 { 154 e.printStackTrace(); 155 } 156 } 157 } 158 159 /** 160 * Return the servlet info. 161 * @return the info 162 */ 163 public String getServletInfo() 164 { 165 return "Session Dump Servlet"; 166 } 167 168 private String getURI( HttpServletRequest request ) 169 { 170 String uri = (String) request.getAttribute( "javax.servlet.forward.request_uri" ); 171 if( uri == null ) 172 { 173 uri = request.getRequestURI(); 174 } 175 return uri; 176 } 177 }